﻿/**
 * @file NisLinkGeoGuidanceCommon_Struct.h
 * @brief NisLinkGeoGuidanceCommon
 * @details 
 * @mainpage http://www.navinfo.com/
 * @author Navinfo
 * @email 400-810-0880
 * @license Navinfo Co.,Ltd. All rights reserved
 */
#ifndef	__NISLINKGEOGUIDANCECOMMONSTRUCT_H_
#define	__NISLINKGEOGUIDANCECOMMONSTRUCT_H_

PRAGMA_PACK_PUSH

namespace Navinfo {
namespace Nis {

class CDividerType;
class CDividerTypeSet;

/**
 * @brief DIVIDER_TYPE
 * 
 */
enum DIVIDER_TYPE {
	DIVIDER_TYPE_HAS_DIVIDER,	///<	存在阻止车辆越过分隔带的实心护栏（泽西护栏、护栏、平板墙和隧道墙）的场合
	DIVIDER_TYPE_NO_DIVIDER,	///<	DIVIDER_TYPE_NO_DIVIDER
};
#define	SPEED_UNLIMITED	(255)
#define	SPEED_VARIABLE	(254)


/**
 * @brief 道路的分隔情报
 * 
 */
class DLL_PUBLIC CDividerType
{
public:
	CDividerType();

	explicit CDividerType(
		  const uchar &m_ucValidityRangeFlag_
		, const uchar &m_ucDividerType_ = 0
		, const Navinfo::Nis::CPathRange &m_clValidityRange_ = Navinfo::Nis::CPathRange()
		);

public:
	/**
	 * @brief 取得ValidityRange
	 *
	 * @return ValidityRange
	 */
	const Navinfo::Nis::CPathRange& GetValidityRange() const;

	/**
	 * @brief 取得ValidityRangeFlag
	 *
	 * @return ValidityRangeFlag表示是否有ValidityRange；ValidityRangeFlag=True的场合，表示在ValidityRange范围内存在道路分隔情报。ValidityRangeFlag=False的场合，表示整条道路存在道路分隔情报。
	 */
	Navinfo::Nis::BOOL GetValidityRangeFlag() const;

	/**
	 * @brief 取得DividerType
	 *
	 * @return 分隔带的类型。只有阻止车辆越过分隔带的实心护栏（泽西护栏、护栏、平板墙和隧道墙）才会设置为“DIVIDER_TYPE_HAS_DIVIDER“
	 */
	DIVIDER_TYPE GetDividerType() const;


public:
	Navinfo::Nis::CPathRange									m_clValidityRange;							///<	  ValidityRange  
	uchar														m_ucValidityRangeFlag;						///<	  ValidityRangeFlag表示是否有ValidityRange；ValidityRangeFlag=True的场合，表示在ValidityRange范围内存在道路分隔情报。ValidityRangeFlag=False的场合，表示整条道路存在道路分隔情报。  
	uchar														m_ucDividerType;							///<	  分隔带的类型。只有阻止车辆越过分隔带的实心护栏（泽西护栏、护栏、平板墙和隧道墙）才会设置为“DIVIDER_TYPE_HAS_DIVIDER“  
};


/**
 * @brief 道路分割情报集合
 * 
 */
class DLL_PUBLIC CDividerTypeSet
{
public:
	CDividerTypeSet();

	explicit CDividerTypeSet(
		  const vector< CDividerType > &m_vclLeft_
		, const vector< CDividerType > &m_vclRight_ = vector< CDividerType >()
		);

public:
	/**
	 * @brief 取得Left的数量
	 *
	 * @return Left的数量
	 */
	size_t GetNumLeft() const;

	/**
	 * @brief 取得数组Left中下标为iNo的元素
	 * @details 
	 *
	 * @return 左侧道路分割情报
	 */
	const CDividerType& GetLeft( size_t iNo ) const;

	/**
	 * @brief 取得Left
	 *
	 * @return 左侧道路分割情报
	 */
	const vector< CDividerType >& GetLeft() const;

	/**
	 * @brief 取得Right的数量
	 *
	 * @return Right的数量
	 */
	size_t GetNumRight() const;

	/**
	 * @brief 取得数组Right中下标为iNo的元素
	 * @details 
	 *
	 * @return 右侧道路分割情报
	 */
	const CDividerType& GetRight( size_t iNo ) const;

	/**
	 * @brief 取得Right
	 *
	 * @return 右侧道路分割情报
	 */
	const vector< CDividerType >& GetRight() const;


public:
	vector< CDividerType >										m_vclLeft;									///<	  左侧道路分割情报  
	vector< CDividerType >										m_vclRight;									///<	  右侧道路分割情报  
};

}
}

PRAGMA_PACK_POP

#endif	//	__NISLINKGEOGUIDANCECOMMONSTRUCT_H_
